package view;

import java.awt.Image;
import java.io.File;
import java.util.ArrayList;
import java.util.List;

import javax.swing.DefaultListModel;
import javax.swing.ImageIcon;

import language.Strings;
import model.OperacoesArquivos;

public class UtilitariosGUI {

	public static javax.swing.filechooser.FileFilter extencao(int extencoes) {
		switch (extencoes) {
			case 1:
				return new javax.swing.filechooser.FileFilter() {
					// Filtro, converte as letras em minusculas antes de comparar
					public boolean accept(File f) {
						return f.getName().toLowerCase().endsWith(".csv")
								|| f.isDirectory();
					}
	
					// Texto que sera exibido para o usuario
					public String getDescription() {
						return Strings.TEXT_LABEL_CSV_DESC;
					}
				};			
			
			case 2:
				return new javax.swing.filechooser.FileFilter() {
					// Filtro, converte as letras em minusculas antes de comparar
					public boolean accept(File f) {
						return f.getName().toLowerCase().endsWith(".txt")
								|| f.isDirectory();
					}
		
					// Texto que sera exibido para o usuario
					public String getDescription() {
						return Strings.TEXT_LABEL_TXT_DESC;
					}
				};		
				
			case 3:
				return new javax.swing.filechooser.FileFilter() {
					// Filtro, converte as letras em minusculas antes de comparar
					public boolean accept(File f) {
						return f.getName().toLowerCase().endsWith(".jpg")
								|| f.isDirectory();
					}
		
					// Texto que sera exibido para o usuario
					public String getDescription() {
						return Strings.TEXT_LABEL_IMAGEM_DESC;
					}
				};	
		}
		return null;
	}
	
	public static ImageIcon criaIconDaImagem(File file){
		ImageIcon icon = criaIconDaImagem(file, 320, 240);
		return icon;
	}
	
	public static ImageIcon criaIconDaImagem(File file, int x, int y){
		if(file.exists()){
			String pathImagem = file.getAbsolutePath();
			
			ImageIcon icon = new ImageIcon(pathImagem);
			Image image = icon.getImage().getScaledInstance(x, y, Image.SCALE_AREA_AVERAGING);
			icon = new ImageIcon(image);
			
			return icon;
		} 
		
		return null;
	}
	
	public static List<String> selecionaPorTipo(List<String> listFluxos, String tipo){
		List<String> selecionados = new ArrayList<String>();
		
		for (int i = 0; i < listFluxos.size(); i++) {
			if(!listFluxos.get(i).equals("")){
				String nomeFluxo = listFluxos.get(i).toString();
				String porte = nomeFluxo.substring(11, 12);
				
				if(tipo.equalsIgnoreCase(Strings.TEXT_LABEL_TODOS)){
					selecionados.add(nomeFluxo);
				} 
				else if(tipo.equalsIgnoreCase(Strings.TEXT_LABEL_G)){
					if(porte.equalsIgnoreCase(Strings.TEXT_LABEL_G) || porte.equalsIgnoreCase(Strings.TEXT_LABEL_C)){
						selecionados.add(nomeFluxo);
					}
				}
				else{
					if(porte.equalsIgnoreCase(tipo)){
						selecionados.add(nomeFluxo);
					}
				}
			}
		}
		
		return selecionados;
	}
	
	public static List<String> selecionaPorTipo(String[] listFluxos, String tipo){
		List<String> selecionados = new ArrayList<String>();
		
		for (int i = 0; i < listFluxos.length; i++) {
			if(!listFluxos[i].equals("")){
				String nomeFluxo = listFluxos[i].toString();
				String porte = nomeFluxo.substring(11, 12);
				
				if(tipo.equalsIgnoreCase(Strings.TEXT_LABEL_TODOS)){
					selecionados.add(nomeFluxo);
				} 
				else if(tipo.equalsIgnoreCase(Strings.TEXT_LABEL_G)){
					if(porte.equalsIgnoreCase(Strings.TEXT_LABEL_G) || porte.equalsIgnoreCase(Strings.TEXT_LABEL_C)){
						selecionados.add(nomeFluxo);
					}
				}
				else{
					if(porte.equalsIgnoreCase(tipo)){
						selecionados.add(nomeFluxo);
					}
				}
			}
		}
		
		return selecionados;
	}
	
	public static DefaultListModel selecionaPorTipo(DefaultListModel listModel, String tipo){
		DefaultListModel selecionados = new DefaultListModel();
		
		if(listModel != null){
			for (int i = 0; i < listModel.size(); i++) {
				if(!listModel.get(i).equals("")){
					String nomeFluxo = listModel.get(i).toString();
					String porte = nomeFluxo.substring(11, 12);
					
					if(tipo.equalsIgnoreCase(Strings.TEXT_LABEL_TODOS)){
						selecionados.addElement(nomeFluxo);
					} 
					else if(tipo.equalsIgnoreCase(Strings.TEXT_LABEL_G)){
						if(porte.equalsIgnoreCase(Strings.TEXT_LABEL_G) || porte.equalsIgnoreCase(Strings.TEXT_LABEL_C)){
							selecionados.addElement(nomeFluxo);
						}
					}
					else{
						if(porte.equalsIgnoreCase(tipo)){
							selecionados.addElement(nomeFluxo);
						}
					}
				}
			}
		}
		
		return selecionados;
	}
	
	public static String getNomeJList(String selecionado){
//		String[] cortado = selecionado.trim().split("-");
//		String item = cortado[1].trim();
		
		String item = selecionado;
		
		return item;
	}
	
	public static StringBuffer LISTAR_FLUXO(File file){
		if(file.exists()){
			List<String> conteudo = OperacoesArquivos.lerTxt(file.getAbsolutePath());
			StringBuffer buffer = new StringBuffer();
			
			for (String linha : conteudo) {
				buffer.append(linha + "\n");
			}
			
			return buffer;
		}
		
		return null;
	}
}
